package com.huike.web.controller.system;

import com.huike.clues.domain.dto.SysDictDataPageDTO;
import com.huike.clues.domain.dto.SysDictTypePageDTO;
import com.huike.clues.domain.entity.SysDictData;
import com.huike.clues.domain.entity.SysDictType;
import com.huike.clues.service.ISysDictDataService;
import com.huike.common.annotation.AutoFill;
import com.huike.common.core.controller.BaseController;
import com.huike.common.core.domain.AjaxResult;
import com.huike.common.core.page.TableDataInfo;
import com.huike.common.enums.FillType;
import com.huike.common.utils.poi.ExcelUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;

import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * @Description 数据字典数据信息接口
 * @Date 2023-10-10
 */
@RestController
@RequestMapping("/system/dict/data")
@Slf4j
@Api(tags = "数据字典数据信息相关接口")
@RequiredArgsConstructor
public class SysDictDataController extends BaseController {
    private final ISysDictDataService iSysDictDataService;

    /**
     * 新增字典数据接口
     *
     * @param sysDictData 数据字典信息实体类
     * @return
     */
    @ApiOperation("新增字典数据接口")
    @PostMapping()
    @AutoFill(FillType.CREATE)
    public AjaxResult add(@RequestBody SysDictData sysDictData) {
        log.info("新增字典数据接口:{}", sysDictData);

        iSysDictDataService.add(sysDictData);

        return AjaxResult.success();
    }

    /**
     * 修改保存字典数据接口
     *
     * @param sysDictData
     * @return
     */
    @ApiOperation("修改保存字典数据")
    @PutMapping()
    @AutoFill(FillType.UPDATE)
    public AjaxResult update(@RequestBody SysDictData sysDictData) {
        log.info("新增字典数据接口:{}", sysDictData);

        iSysDictDataService.update(sysDictData);

        return AjaxResult.success();
    }

    // TODO 字典导出待完成

    /**
     * 字典导出接口
     * @param sysDictDataPageDTO
     * @return
     */
    // @ApiOperation("字典导出接口")
    // @GetMapping("/export")
    // public AjaxResult export(SysDictDataPageDTO sysDictDataPageDTO){
    //     log.info("字典导出接口：{}",sysDictDataPageDTO);
    //
    //     iSysDictDataService.export(sysDictDataPageDTO);
    //
    //     return AjaxResult.success("1689015872903字典数据.xlsx",null);
    // }

    /**
     * 导出表格
     */
    @GetMapping("/export")
    public AjaxResult<?> export(SysDictDataPageDTO dto) {
        List<SysDictData> list = iSysDictDataService.getDictDataList(dto);
        ExcelUtil<SysDictData> util = new ExcelUtil<>(SysDictData.class);
        return util.exportExcel(list, "字典数据");
    }

    /**
     * 字典列表接口
     * @param sysDictDataPageDTO
     * @return
     */
    @ApiOperation("字典列表接口")
    @GetMapping("/list")
    public TableDataInfo<List<SysDictData>> list(SysDictDataPageDTO sysDictDataPageDTO) {
        log.info("字典列表接口:{}",sysDictDataPageDTO);
        TableDataInfo<List<SysDictData>> tableDataInfo = iSysDictDataService.list(sysDictDataPageDTO);
        return tableDataInfo;
    }


    /**
     * 根据字典数据查询字典数据信息接口
     *
     * @param dictType
     * @return
     */
    @ApiOperation("根据字典数据查询字典数据信息")
    @GetMapping("type/{dictType}")
    public AjaxResult findByDictType(@PathVariable String dictType) {
        log.info("根据字典数据查询字典数据信息接口:{}", dictType);

         List<SysDictData> sysDictDatas = iSysDictDataService.findByDictType(dictType);

        return AjaxResult.success(sysDictDatas);
    }

    /**
     * 删除字典信息接口
     * @param dictCodes
     * @return
     */
    @ApiOperation("删除字典信息接口")
    @DeleteMapping("{dictCodes}")
    public AjaxResult delete(@PathVariable List<Long> dictCodes){
        log.info("删除字典数据接口：{}",dictCodes);

        iSysDictDataService.delete(dictCodes);

        return AjaxResult.success();
    }

    /**
     * 查询字典数据详细接口
     * @param dictCode
     * @return
     */
    @ApiOperation("查询字典数据详细接口")
    @GetMapping("{dictCode}")
    public AjaxResult findByDictCode(@PathVariable Long dictCode){
        log.info("查询字典数据详细接口：{}",dictCode);

        SysDictData sysDictData = iSysDictDataService.findByDictCode(dictCode);

        return AjaxResult.success(sysDictData);
    }

}
